﻿// CServerLoadDlg.cpp: 实现文件
//

#include "pch.h"
#include "HackSkill.h"
#include "CServerLoadDlg.h"
#include "afxdialogex.h"
#include "SysDriver.h"
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")

// CServerLoadDlg 对话框

IMPLEMENT_DYNAMIC(CServerLoadDlg, CDialogEx)

CServerLoadDlg::CServerLoadDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DIALOG_ServerLoaded, pParent)
	, csPath(_T(""))
{

}

CServerLoadDlg::~CServerLoadDlg()
{
}

void CServerLoadDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_MFCEDITBROWSE1, csPath);
}


BEGIN_MESSAGE_MAP(CServerLoadDlg, CDialogEx)
	ON_WM_DROPFILES()
	ON_BN_CLICKED(IDC_BUTTON_ServerLoad, &CServerLoadDlg::OnBnClickedButtonServerload)
	ON_BN_CLICKED(IDC_BUTTON_ServerStart, &CServerLoadDlg::OnBnClickedButtonServerstart)
	ON_BN_CLICKED(IDC_BUTTON_ServerStop, &CServerLoadDlg::OnBnClickedButtonServerstop)
	ON_BN_CLICKED(IDC_BUTTON_ServerDelete, &CServerLoadDlg::OnBnClickedButtonServerdelete)
END_MESSAGE_MAP()


// CServerLoadDlg 消息处理程序


BOOL CServerLoadDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化

	// 解决以管理员运行，接收不到DropFile
	ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
	ChangeWindowMessageFilter(0x0049, MSGFLT_ADD); // 0x0049 == WM_COPYGLOBALDATA

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}


//拖拽文件
void CServerLoadDlg::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	UINT count = 0;

	csPath = _T("");

	//从成功的拖放操作中检索文件的名称，获取拖拽文件的数目
	count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);

	//如果只拖拽一个文件夹
	if (count == 1)
	{
		//获得拖拽的文件名
		DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));

		//保存文件路径
		csPath = filePath;

		//显示文件路径
		CWnd* pWnd = GetDlgItem(IDC_MFCEDITBROWSE1);
		pWnd->SetWindowText(filePath);
	}
	else if (count > 1)
	{
		MessageBox(_T("不支持多个文件！"), _T("提示"));
	}

	CDialogEx::OnDropFiles(hDropInfo);
}


//加载服务
void CServerLoadDlg::OnBnClickedButtonServerload()
{
	// TODO: 在此添加控件通知处理程序代码

	//获取文件路径
	CWnd* pWnd = GetDlgItem(IDC_MFCEDITBROWSE1);
	csPath =L"";
	pWnd->GetWindowTextW(csPath);
	if (L"" == csPath)
	{
		MessageBox(L"没有拖拽文件！",L"提示");
		return;
	}

	Service m_Service(csPath.GetBuffer());
	string error;
	if( m_Service.load(&error))
	{
		MessageBox(L"加载服务成功!", L"提示");
	}
	else
	{
		MessageBoxA(NULL, error.c_str(), "错误", NULL);
	}
}


//启动服务
void CServerLoadDlg::OnBnClickedButtonServerstart()
{
	// TODO: 在此添加控件通知处理程序代码
	if (L"" == csPath)
	{
		MessageBox(L"没有拖拽文件！", L"提示");
		return;
	}
	Service m_Service(csPath.GetBuffer());
	string error;
	if (m_Service.start(&error))
	{
		MessageBox(L"启动服务成功!", L"提示");
	}
	else
	{
		MessageBoxA(NULL, error.c_str(), "错误", NULL);
	}
}


//停止服务
void CServerLoadDlg::OnBnClickedButtonServerstop()
{
	// TODO: 在此添加控件通知处理程序代码
	//停止服务
	if (L"" == csPath)
	{
		MessageBox(L"没有拖拽文件！", L"提示");
		return;
	}
	Service m_Service(csPath.GetBuffer());
	string error;
	if (m_Service.stop(&error))
	{
		MessageBox(L"停止服务成功！", L"提示");
	}
	else
	{
		MessageBoxA(NULL, error.c_str(), "错误", NULL);
	}
}


//删除服务
void CServerLoadDlg::OnBnClickedButtonServerdelete()
{
	// TODO: 在此添加控件通知处理程序代码

	//删除服务
	if (L"" == csPath)
	{
		MessageBox(L"没有拖拽文件！", L"提示");
		return;
	}
	Service m_Service(csPath.GetBuffer());
	string error;
	if (m_Service.unLoad(&error))
	{
		MessageBox(L"删除服务成功！", L"提示");
	}
	else
	{
		MessageBoxA(NULL, error.c_str(), "错误", NULL);
	}
}




